A thread is a light-weight process. The implementation of threads and processes differs from one operating system to another, but in most cases, a thread is contained inside a process. Multiple threads can exist within the same process and share resources, such as memory, while different processes do not share these resources.
Multi-threading is a widespread programming and execution model that allows multiple threads to exist within the context of a single process. These threads share the resources allocated to the process, but are able to execute independently. An interesting application of multithreading is when it is applied to a single process to enable parallel execution on a multiprocessing system. Multithreading allows the process to be executed faster on computer systems that have multiple CPUs, CPUs with multiple cores, or across a cluster of machines—because the threads of the program naturally lend themselves to truly concurrent execution. Accordingly, managing of threads is extremely important.
Unfortunately, existing thread management technologies leads to situation where threads of one group would be idle, while threads in other groups are created to execute a number of tasks without using the idle threads thereby not effectively managing the threads. This situation is due to unsupervised creation of threads by individual applications without having any visibility on idle threads being available.